package com.cmict.data.infra.service.message;

import com.cmict.data.framework.common.pojo.PageResult;
import com.cmict.data.infra.api.message.dto.MessageDTO;
import com.cmict.data.infra.controller.admin.vo.MessageTemplateCreateReqVO;
import com.cmict.data.infra.controller.admin.vo.MessageTemplateExportReqVO;
import com.cmict.data.infra.controller.admin.vo.MessageTemplatePageReqVO;
import com.cmict.data.infra.controller.admin.vo.MessageTemplateUpdateReqVO;
import com.cmict.data.infra.dal.dataobject.message.MessageTemplateDO;
import com.cmict.data.system.api.conf.dto.ConfSystemDTO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 信息模板 Service 接口
 * @author liutao
 * @date 2022/5/11
 */
public interface MessageTemplateService {

    /**
     * 创建信息模板
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createMessageTemplate(@Valid MessageTemplateCreateReqVO createReqVO);

    /**
     * 更新信息模板
     *
     * @param updateReqVO 更新信息
     */
    void updateMessageTemplate(@Valid MessageTemplateUpdateReqVO updateReqVO);

    /**
     * 删除信息模板
     *
     * @param id 编号
     */
    void deleteMessageTemplate(Long id);

    /**
     * 获得信息模板
     *
     * @param id 编号
     * @return 信息模板
     */
    MessageTemplateDO getMessageTemplate(Long id);

    /**
     * 获得信息模板列表
     *
     * @param ids 编号
     * @return 信息模板列表
     */
    List<MessageTemplateDO> getMessageTemplateList(Collection<Long> ids);

    /**
     * 获得信息模板分页
     *
     * @param pageReqVO 分页查询
     * @return 信息模板分页
     */
    PageResult<MessageTemplateDO> getMessageTemplatePage(MessageTemplatePageReqVO pageReqVO);

    /**
     * 获得信息模板列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 信息模板列表
     */
    List<MessageTemplateDO> getMessageTemplateList(MessageTemplateExportReqVO exportReqVO);

    /**
     * 通过模板发送消息
     *
     * @param messageDTO 创建信息
     * @return 编号
     */
    Boolean sendMessageByTemplate(@Valid MessageDTO messageDTO);

    Long getTemplateByTitle(String title);

    Boolean testEmail(ConfSystemDTO confSystemDTO);

}
